const { dbCmd, LOG_TYPE, deviceCollection, userCollection } = require('../../common/constants');

async function logout() {
    const { deviceId } = this.getUniversalClientInfo();
    const uniIdToken = this.getUniversalUniIdToken();
    const payload = await this.uniIdCommon.checkToken(uniIdToken, {
        autoRefresh: false,
    });
    if (payload.errCode) {
        throw payload;
    }
    const uid = payload.uid;

    // 删除token
    await userCollection.doc(uid).update({
        token: dbCmd.pull(uniIdToken),
    });

    // 仅当device表的device_id和user_id均对应时才进行更新
    await deviceCollection
        .where({
            device_id: deviceId,
            user_id: uid,
        })
        .update({
            token_expired: 0,
        });
    await this.middleware.uniIdLog({
        data: {
            user_id: uid,
        },
        type: LOG_TYPE.LOGOUT,
    });
    return {
        errCode: 0,
    };
}

module.exports = {
    logout,
};
